/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Pagos.Tags.Html;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author FCCCRTI05
 */
public class FormularioNotificacionProveedores extends HttpServlet
{

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        PrintWriter out = response.getWriter();
        //REINICIO DEL BUFFER
        response.reset();
        response.resetBuffer();
        response.setContentType("text/html; charset=ISO-8859-1");
        response.setHeader("Cache-Control","no-cache");
        try
        {
            //CONEXION A LA BD
           db.Conexion conectar = (db.Conexion)request.getSession().getAttribute("db");
            if (conectar != null)
            {
                Connection conex = conectar.ObtenerConexionSQLServer();
                if (conex.isClosed() == false)
                {
                    if ((request.getParameter("flag") != null)
                    &&(request.getParameter("compania") != null)
                    &&(request.getParameter("flag").equals("ok")))
                    {
                        //PARAMETROS
                        String compania = "00"+request.getParameter("compania");
                        //OBJETO DE UTILIDADES
                        db.Utilidades utilidades = new db.Utilidades();
                        //FORMATO DE FECHA NORMAL
                        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                        //FORMATO DECIMAL
                        DecimalFormat df = new DecimalFormat("###");
                        DecimalFormat df1 = new DecimalFormat("#,##0.00");
                        Statement s_externo = null,s_interno1 = null,s_interno2 = null,s_interno3 = null;
                        ResultSet rs_externo = null,rs_interno1 = null,rs_interno2 = null,rs_interno2_test = null,rs_interno3 = null;

                        String jde_cuenta = null,jde_banco = null,jde_proveedor_nombre = null,jde_mail_proveedor = null;
                        float jde_proveedor = 0,jde_pago = 0;
                        String jde_cheque = null,jde_cheque_fecha = null,jde_cheque_fecha_sql = null,jde_cheque_moneda = null;
                        String jde_cheque_monto = null,jde_factura = null,jde_factura_fecha = null,jde_factura_fecha_sql = null;
                        String jde_factura_monto = null,jde_factura_moneda = null;
                        float jde_documento = 0;

                        String fecha = sdf.format(new Date());
                        String consulta_externa = null,consulta_interna1 = null,consulta_interna2 = null,consulta_interna3 = null;
                        s_externo = conex.createStatement();
                        s_interno1 = conex.createStatement();
                        s_interno2 = conex.createStatement();
                        s_interno3 = conex.createStatement();
                        //SALIDAS HTML
                        out.write("<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"2\" class=\"bordes\">"+"\n");
                        //RECORRER TODAS LAS CUENTAS DE LA COMPANIA
                        consulta_externa = "select GMCO,GMAID,GMDL01,GMOBJ from TESTDTA.F0901"+
                        " where GMCO = "+"'"+compania+"'"+" and GMOBJ in('1130','1140') order by GMAID";
                        rs_externo = s_externo.executeQuery(consulta_externa);
                        while (rs_externo.next())
                        {
                            jde_cuenta = rs_externo.getString("GMAID");
                            jde_banco = rs_externo.getString("GMDL01");
                            jde_banco = utilidades.QuitarEspaciosBlancoSobrantes(jde_banco);
                            //OBTENER REGISTROS DE  PROVEEDORES DE LA CUENTA
                            consulta_interna1 = "select distinct RMPYE,RMGLBA from TESTDTA.F0413"+
                            " where RMGLBA = "+"'"+jde_cuenta+"'"+" order by RMPYE";
                            rs_interno1 = s_interno1.executeQuery(consulta_interna1);
                            while (rs_interno1.next())
                            {
                                jde_proveedor = rs_interno1.getFloat("RMPYE");
                                jde_proveedor_nombre = ObtenerNombreProveedor(conex,jde_proveedor);
                                jde_proveedor_nombre = utilidades.QuitarEspaciosBlancoSobrantes(jde_proveedor_nombre);
                                jde_mail_proveedor = ObtenerEmailProveedor(conex,jde_proveedor);
                                //OBTENER REGISTRO DE ENCABEZADOS
                                consulta_interna2 = "select RMPYE,RMPYID,RMDOCM,RMPAAP,RMCRCD,RMPRGF,RMDMTJ from TESTDTA.F0413"+
                                " where RMPYE = "+jde_proveedor+" and RMGLBA = "+"'"+jde_cuenta+"'"+" and RMPAAP <> 0 and RMPRGF not like 'S'"+
                                " order by RMPYE,RMPYID,RMGLBA";
                                rs_interno2_test = s_interno2.executeQuery(consulta_interna2);
                                if ((rs_interno2_test != null)&&(rs_interno2_test.next()))
                                {
                                    out.write("<tr style=\"background-color:#99ffcc; font-weight:bold;\" class=\"bordes\">"+"\n");
                                    out.write("<td align=\"left\" colspan=\"6\" class=\"bordes\">"+"\n"+
                                    "PROVEEDOR: <span style=\"color:blue; font-weight:bold;\">"+df.format(jde_proveedor)+"\n"+
                                    "<input type=\"hidden\" id=\"prov"+df.format(jde_proveedor)+"\" name=\"prov"+df.format(jde_proveedor)+"\" value=\""+df.format(jde_proveedor)+"\" title=\"Id proveedor\"/>"+
                                    " - "+jde_proveedor_nombre+"</span></td>"+"\n");
                                    out.write("<td align=\"left\" colspan=\"5\" class=\"bordes\">"+"\n"+
                                    "Email del proveedor/contacto: <input type=\"text\" id=\"mail"+df.format(jde_proveedor)+"\" name=\"mail"+df.format(jde_proveedor)+"\" class=\"textfield\" style=\"color:blue;\" value=\""+jde_mail_proveedor+"\"/></td>"+"\n");
                                    out.write("</tr>"+"\n");
                                    out.write("<tr style=\"background-color:#0ff; font-weight:bold;\" class=\"bordes\">"+"\n");
                                    out.write("<td align=\"left\" width=\"15%\" class=\"bordes\"><b>Banco</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"8%\" class=\"bordes\"><b>N&uacute;mero cheque</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"8%\" class=\"bordes\"><b>Fecha cheque</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"6%\" class=\"bordes\"><b>Moneda</b></td>"+"\n");
                                    out.write("<td align=\"right\" width=\"10%\" class=\"bordes\"><b>Monto</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"10%\" class=\"bordes\"><b>Fecha notificaci&oacute;n</b></td>"+"\n");
                                    out.write("<td align=\"center\" width=\"6%\" class=\"bordes\"><b>Selecci&oacute;n</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"10%\" class=\"bordes\"><b>Facturas</b></td>"+"\n");
                                    out.write("<td align=\"left\" width=\"10%\" class=\"bordes\"><b>Fecha factura</b></td>"+"\n");
                                    out.write("<td align=\"right\" width=\"7%\" class=\"bordes\"><b>Moneda factura</b></td>"+"\n");
                                    out.write("<td align=\"right\" width=\"10%\" class=\"bordes\"><b>Monto pagado</b></td>"+"\n");
                                    out.write("</tr>"+"\n");
                                    rs_interno2 = s_interno2.executeQuery(consulta_interna2);
                                    while (rs_interno2.next())
                                    {
                                        jde_cheque = df.format(rs_interno2.getFloat("RMDOCM"));
                                        jde_cheque_fecha = df.format(rs_interno2.getFloat("RMDMTJ"));
                                        jde_cheque_fecha_sql = utilidades.ConvertirJulianoAGregorianoSQL(jde_cheque_fecha);
                                        jde_cheque_fecha = utilidades.ConvertirJulianoAGregorianoHTML(jde_cheque_fecha);
                                        jde_cheque_moneda = rs_interno2.getString("RMCRCD");
                                        jde_cheque_monto =  df1.format(Math.abs(rs_interno2.getDouble("RMPAAP"))/100);
                                        jde_pago = rs_interno2.getFloat("RMPYID");
                                        out.write("<tr class=\"bordes\">"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">"+jde_banco+
                                        "<input type=\"hidden\" id=\"banc"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"banc"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+jde_banco+"\"/></td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">"+jde_cheque+
                                        "<input type=\"hidden\" id=\"cheq"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"cheq"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+jde_cheque+"\"/></td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">"+jde_cheque_fecha+
                                        "<input type=\"hidden\" id=\"fech"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"fech"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+jde_cheque_fecha_sql+"\"/></td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">"+jde_cheque_moneda+
                                        "<input type=\"hidden\" id=\"mone"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"mone"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+jde_cheque_moneda+"\"/></td>"+"\n");
                                        out.write("<td align=\"right\" class=\"bordes\">"+jde_cheque_monto+
                                        "<input type=\"hidden\" id=\"mont"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"mont"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+jde_cheque_monto+"\"/></td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">"+fecha+"</td>"+"\n");
                                        out.write("<td align=\"center\" class=\"bordes\">"+"\n"+
                                        "<input type=\"checkbox\" id=\"check"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"check"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" checked=\"true\"/>"+"\n"+
                                        "<input type=\"hidden\" id=\"pag"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" name=\"pag"+df.format(jde_proveedor)+"_"+df.format(jde_pago)+"\" value=\""+df.format(jde_pago)+"\"/></td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                        out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                        out.write("</tr>"+"\n");
                                        //OBTENER DETALLE DE PAGOS
                                        consulta_interna3 = "select RNPYID,RNDCTM,RNDOC,RNAN8,RNPAAP,RNCRCD from TESTDTA.F0414"+
                                        " where RNPYID = "+jde_pago+" and RNDCTM not like 'PG' and RNAN8 = "+jde_proveedor+" order by RNDOC";
                                        rs_interno3 = s_interno3.executeQuery(consulta_interna3);
                                        while (rs_interno3.next())
                                        {
                                            //jde_tipo_documento = rs_interno3.getString("RNDCTM");
                                            jde_documento = rs_interno3.getFloat("RNDOC");
                                            jde_factura = ObtenerNumeroFactura(conex,compania,jde_documento);
                                            jde_factura = utilidades.QuitarEspaciosBlancoSobrantes(jde_factura);
                                            jde_factura_fecha = ObtenerFechaFactura(conex,compania,jde_documento);
                                            jde_factura_fecha_sql = utilidades.ConvertirJulianoAGregorianoSQL(jde_factura_fecha);
                                            jde_factura_fecha = utilidades.ConvertirJulianoAGregorianoHTML(jde_factura_fecha);
                                            jde_factura_moneda = rs_interno3.getString("RNCRCD");
                                            jde_factura_monto = df1.format(Math.abs(rs_interno3.getDouble("RNPAAP"))/100);
                                            out.write("<tr class=\"bordes\">"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"center\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">&nbsp;</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">"+jde_factura+
                                            "<input type=\"hidden\" id=\"fact"+rs_interno3.getRow()+"_"+df.format(jde_proveedor)+"|"+df.format(jde_pago)+"\""+
                                            " name=\"fact"+rs_interno3.getRow()+"_"+df.format(jde_proveedor)+"|"+df.format(jde_pago)+"\" value=\""+jde_factura+"@"+jde_factura_fecha_sql+"|"+jde_factura_moneda+"*"+jde_factura_monto+"\"></td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">"+jde_factura_fecha+"</td>"+"\n");
                                            out.write("<td align=\"left\" class=\"bordes\">"+jde_factura_moneda+"</td>"+"\n");
                                            out.write("<td align=\"right\" class=\"bordes\">"+jde_factura_monto+"</td>"+"\n");
                                            out.write("</tr>"+"\n");
                                        }
                                        rs_interno3.close();
                                    }
                                    rs_interno2.close();
                                }
                                rs_interno2_test.close();
                            }
                            rs_interno1.close();
                        }
                        out.write("</table>"+"\n");
                        rs_externo.close();
                        s_externo.close();
                        s_interno1.close();
                        s_interno2.close();
                        s_interno3.close();
                    }
                }
                if (conex.isClosed() == true)
                    out.write("<p align=\"center\">"+
                    "<img src=\"/jde/img/alerta.png\" width=\"24\" height=\"24\" border=\"0\" align=\"absmiddle\" />"+
                    "&nbsp;<b><a href=\"/jde/Pagos/?sesion_finalizada=ok\" class=\"menu_top\">La sesi&oacute;n ha finalizado,"+
                    " haga clic en este texto para reinicar.</a></b></p>");
            }
            if (conectar == null)
                out.write("<p align=\"center\">"+
                "<img src=\"/jde/img/alerta.png\" width=\"24\" height=\"24\" border=\"0\" align=\"absmiddle\" />"+
                "&nbsp;<b><a href=\"/jde/Pagos/?sesion_finalizada=ok\" class=\"menu_top\">La sesi&oacute;n ha finalizado,"+
                " haga clic en este texto para reinicar.</a></b></p>");
        }
        catch (Exception x)
            {
            out.write("<p align=\"center\">"+
            "<img src=\"/jde/img/alerta.png\" width=\"24\" height=\"24\" border=\"0\" align=\"absmiddle\" />"+
            "&nbsp;<b>Se produjo un error: "+new db.Utilidades().ObtenerStringStackTrace(x)+".</b></p>");
        }
        finally
        {
            out.flush();
            out.close();
        }
    }

    public String ObtenerNombreProveedor(Connection conex,float codigo)
    {
        String nombre = null;
        Statement s = null;
        ResultSet rs = null;
        try
        {
            s = conex.createStatement();
            rs = s.executeQuery("select ABAN8,ABALPH from TESTDTA.F0101"+
            " where ABAN8 = "+codigo);
            if ((rs != null)&&(rs.next()))
                nombre = rs.getString("ABALPH");
            rs.close();
            s.close();
        }
        catch (Exception x)
        {
            nombre = x.getMessage();
        }
        return nombre;
    }

    public String ObtenerEmailProveedor(Connection conex,float codigo)
    {
        String email = "";
        Statement s = null;
        ResultSet rs = null;
        try
        {
            s = conex.createStatement();
            rs = s.executeQuery("select EAAN8,EAEMAL from TESTDTA.F01151"+
            " where EAAN8 = "+codigo);
            if ((rs != null)&&(rs.next()))
                email = rs.getString("EAEMAL");
            rs.close();
            s.close();
        }
        catch (Exception x)
        {
            email = x.getMessage();
        }
        return email;
    }

    public String ObtenerNumeroFactura(Connection conex,String compania,float numero_documento)
    {
        String factura = null;
        Statement s = null;
        ResultSet rs = null;
        try
        {
            s = conex.createStatement();
            rs = s.executeQuery("select RPKCO,RPDCT,RPDOC,RPSFX,RPVINV from TESTDTA.F0411"+
            " where RPKCO = "+"'"+compania+"'"+" and RPDOC = "+numero_documento+" and RPSFX = '001'");
            while (rs.next())
                factura = rs.getString("RPVINV");
            rs.close();
            s.close();
        }
        catch (Exception x)
        {
            factura = "ERROR: "+x.getMessage();
        }
        return factura;
    }

    public String ObtenerFechaFactura(Connection conex,String compania,float numero_documento)
    {
        String numero = null;
        Statement s = null;
        ResultSet rs = null;
        try
        {
            s = conex.createStatement();
            rs = s.executeQuery("select RPKCO,RPDCT,RPDOC,RPSFX,RPDIVJ from TESTDTA.F0411"+
            " where RPKCO = "+"'"+compania+"'"+" and RPDOC = "+numero_documento+" and RPSFX = '001'");
            while (rs.next())
                numero = String.valueOf(rs.getInt("RPDIVJ"));
            rs.close();
            s.close();
        }
        catch (Exception x)
        {
            numero = "ERROR: "+x.getMessage();
        }
        return numero;
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        processRequest(request, response);
    }
}